package org.skywork.top.core.algorithm.array;

import java.util.Arrays;

/**
 * 移除元素
 */
public class no_27 {

    /**
     * 给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
     *
     * 假设 nums 中不等于 val 的元素数量为 k，要通过此题，您需要执行以下操作：
     *
     * 更改 nums 数组，使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
     *
     * 返回 k。
     */
    public static int removeElement(int[] nums, int val) {
        Arrays.sort(nums);
        int start = -1;
        int num = 0;
        for(int i = 0; i < nums.length; i++){
            if(nums[i] == val){
                start = i;
                num++;
                nums[i] = 99999999;
            }
        }

        if(start == -1){
            return nums.length;
        }

        Arrays.sort(nums);
        int[] nums2 = new int[nums.length - num];
        System.arraycopy(nums, 0, nums2, 0, nums.length - num);
        nums = nums2;
        return nums.length - num;
    }


    public static int removeElement2(int[] nums, int val) {
        int ans = 0;
        for(int num: nums) {
            if(num != val) {
                nums[ans] = num;
                ans++;
            }
        }
        return ans;
    }


    public static void main(String[] args) {
        int[] nums = {0,1,2,2,3,0,4,2};
        int val = 2;
        removeElement(nums, val);
    }
}
